﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Data.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Atendex.Dominio.Interfaces;
using Atendex.Infraestrutura.Repositórios;
using Atendex.Dominio;
using Atendex.Containex;
using Atendex.Web.AppCode;

namespace Atendex.Web
{
    public partial class CadastrarAtendente : System.Web.UI.Page
    {

        private RepositorioAtendente repositorio = new RepositorioAtendente();
        private IAtendente[] Atendentes
        {

            get
            {
                if (ViewState["Atendentes"] != null)
                    return (IAtendente[])ViewState["Atendentes"];

                ViewState["Atendentes"] = repositorio.ObtemTodos();
                return (IAtendente[])ViewState["Atendentes"];
            }

            set
            {
                ViewState["Atendentes"] = value;
            }

          
        }



        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                IGerente gerente = AtendexContext.GerenteAtual(this);
                if (gerente == null)
                {
                    this.pnlCadastro.Visible = false;
                    ShowMensagem("Você deve fazer o login como gerente antes de cadastrar um Atendente.");
                }
                else
                {
                    this.pnlCadastro.Visible = true;
                }
            }
            else
            {
                lblMensagem.Visible = false;
            }

            gdvAtendentes.DataSource = Atendentes;
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            gdvAtendentes.DataBind();
        }


        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                IAtendente atendente = Container.CriarAtendente(txtNome.Text, txtEmail.Text, txtLogin.Text, txtSenha.Text);
                repositorio.Salvar(atendente);
                IAtendente[] atendentes = Atendentes;
                Array.Resize(ref atendentes, Atendentes.Length + 1);
                atendentes[atendentes.Length - 1] = atendente;
                Atendentes = atendentes;
                ShowMensagem("Atendente Cadastrado com sucesso!");
                LimparCampos();
            }
            catch (Exception ex)
            {
                ShowMensagem(ex.Message);
            }
        }





        protected void gdvUpdate(object sender, GridViewUpdateEventArgs e)
        {
            GridViewRow row = ((GridView)sender).Rows[e.RowIndex];

            int id = (int)gdvAtendentes.DataKeys[e.RowIndex].Value;


            IAtendente atendente = Atendentes.Where(a => a.Id == id).First();


            atendente.Nome = ((TextBox)((GridView)sender).Rows[e.RowIndex].FindControl("txtNome")).Text;
            atendente.Email = ((TextBox)((GridView)sender).Rows[e.RowIndex].FindControl("txtEmail")).Text;
            atendente.Login = ((TextBox)((GridView)sender).Rows[e.RowIndex].FindControl("txtLogin")).Text;
            string senha = ((TextBox)((GridView)sender).Rows[e.RowIndex].FindControl("txtSenha")).Text;
            if (!string.IsNullOrEmpty(senha))
                atendente.Senha = senha;

            try
            {
                repositorio.Salvar(atendente);
                ShowMensagem("Atendente Editado com sucesso!");
                gdvAtendentes.EditIndex = -1;
                LimparCampos();
            }
            catch (Exception ex)
            {
                ShowMensagem(ex.Message);
            }



        }

        protected void gdvEdit(object sender, GridViewEditEventArgs e)
        {
            gdvAtendentes.EditIndex = e.NewEditIndex;
        }

        protected void gdvCancelEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gdvAtendentes.EditIndex = -1;
        }

        private void ShowMensagem(string mensagem)
        {
            lblMensagem.Text = mensagem;
            lblMensagem.Visible = true;
        }

        private void LimparCampos()
        {
            txtNome.Text = "";
            txtEmail.Text = "";
            txtLogin.Text = "";
            txtSenha.Text = "";
        }

    }
}
